#ifndef MAINWINDOW_H
#define MAINWINDOW_H
// #include "tcpclient.h"
#include <QMainWindow>
#include <QFileDialog>
#include <QDebug>
#include <QPixmap>
#include <QTimer>
#include <QTime>
#include <QDate>
#include <QList>
#include <QMessageBox>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QListWidgetItem>
#include <QFileInfo>
#include <QTcpSocket>
#include <QVideoWidget>
#include <QMediaPlayer>
#include <QDir>
#include <QProcess>
#include <QNetworkAccessManager>
#include <QMap>
#include <QNetworkReply>
#include <opencv2/opencv.hpp>
#include <QThreadPool>
#include <QCoreApplication>
#include <QtConcurrent>
#include <QFutureWatcher>
#include <QSharedMemory>
#include <QProgressBar>
#include "server.h"
#include "progress.h"


#include "form.h"
#include "file.h"
#include "lastvideo.h"
#include "sendvideo.h"

#include "filename.h"

QT_BEGIN_NAMESPACE


namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    //初始化界面
    void initInterface();
    //帧率转时间
    QString fpsToTimeString(int totalFrames,double fps,bool flag = false,int h=0,int m=0 ,int s=0);
    //启动所有线程
    void startThread();
    //切割选择视频，发送
    void videoProcessing();
    //视频帧率
    double getVideoFPS(const std::string& videoPath);
    //视频总帧率
    int getTotalFrames(const std::string& videoPath);
    //骨骼视频获取
    void bonesVideo();
    //工艺算法依次发送，多个会出问题
    void sendNextRequest(QByteArray sendData);
    //创建文件夹
    void mkdir(const QString& path);
    // 清除指定文件夹内的所有内容
    bool clearFolder(const QString& folderPath);
private slots:
    //添加文件
    void on_pushButton_clicked();
    //上传发送
    void on_pushButton_3_clicked();
    //双击显示表单
    void on_listWidget_2_itemDoubleClicked(QListWidgetItem *item);
    //右击删除
    void on_listWidget_customContextMenuRequested(const QPoint &pos);
    //数据解析
    void analysis(QJsonObject obj);
    //数据处理
    void handle(QString filePath,QJsonArray listArray);
    //单击播放视频
    void on_listWidget_2_itemClicked(QListWidgetItem *item);


private:
    Ui::MainWindow *ui;

    filename m_filename;
    //时间定时器
    QTimer *m_timer;
    //任务队列发送
    QTimer *m_timer_run;
    //文件链表
    QList<QString> fileList;
    //切割后文件链表
    QList<QPair<QString,QVector<QPair<QString,QJsonArray>>>> listpair;
    QVector<QPair<QString,QJsonArray>> temp_listfile;
    QMap<int ,int> map_mp4;
    //当前软件位置
    QString appDirPath;
    //播放视频
    QMediaPlayer *player;
    //工艺
    QNetworkAccessManager *manager ;
    //骨骼
    QNetworkAccessManager *manager_2 ;
    //工时算法
    server *m_server_1;
    //骨骼算法
    server *m_server_2;
    //任务队列
    QList<QByteArray> requestQueue;
    //任务计数
    int flag_final =0;

    //显示
    //所有
    int a1=0;
    //裁减
    int a2=0;
    //算法
    int a3=0;
    progress m_progress;

    //最后裁减保存
    lastVideo *m_lastvideo;
    QThread lastthread;
    //本地裁减
    sendVideo *m_sendvideo;
    QThread sendthread;
    //骨骼视频标志位
    bool bonesFlag = true;
    //发送结束
    bool sendFlag = true;


    int algorithm=0;

};
#endif // MAINWINDOW_H
